package top.zhangjianyong.blog.service;

import top.zhangjianyong.blog.model.request.UploadUrlRequest;
import top.zhangjianyong.blog.model.response.UploadUrlResponse;

/**
 * OSS 服务接口
 * 
 * @author zhangjianyong
 * @since 2024-01-01
 */
public interface OssService {
    
    /**
     * 生成上传URL
     * 
     * @param request 上传URL请求参数
     * @return 上传URL响应
     */
    UploadUrlResponse generateUploadUrl(UploadUrlRequest request);
    
    /**
     * 删除文件
     * 
     * @param filePath 文件路径
     * @return 是否删除成功
     */
    boolean deleteFile(String filePath);
    
    /**
     * 获取文件访问URL
     * 
     * @param filePath 文件路径
     * @return 文件访问URL
     */
    String getFileUrl(String filePath);
    
    /**
     * 获取带签名的文件访问URL
     * 
     * @param filePath 文件路径
     * @param expireSeconds 过期时间（秒）
     * @return 带签名的文件访问URL
     */
    String getSignedFileUrl(String filePath, Integer expireSeconds);
    
    /**
     * 检查文件是否存在
     * 
     * @param filePath 文件路径
     * @return 文件是否存在
     */
    boolean fileExists(String filePath);
    
    /**
     * 获取文件大小
     * 
     * @param filePath 文件路径
     * @return 文件大小（字节）
     */
    Long getFileSize(String filePath);
    
    /**
     * 复制文件
     * 
     * @param sourcePath 源文件路径
     * @param targetPath 目标文件路径
     * @return 是否复制成功
     */
    boolean copyFile(String sourcePath, String targetPath);
} 